﻿using System;
using System.Runtime.InteropServices;

namespace UDPSocketProject
{
    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    public struct DataFrameHeaderEnum
    {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
        public string mark;      //固定为!!!!!! 用于确定当前帧的合法性

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string devid;    // 设备的ID号最多16字节，最少4字节。相当于devmac字段的别名。

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
        public byte[] devmac;    //设备的MAC地址，确定设备的唯一性。

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
        public string longitude; //设备位置信息，经度

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
        public string latitude; //设备位置信息，纬度

        // [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
        public UInt32 data_len;     //表示当然帧后面存在的frame_data 的个数。
    }

    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    struct FrameDataEnum
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
        public byte[] sta_mac;     // 采集到的无线设备（如手机，平板）MAC，字段不能为全0和全0xff, 同时这个字段的前3字节需要在oui.txt中查询是否存在，如不存在直接丢掉。

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
        public byte[] ap_mac;      //这个字段表示MAC为sta_mac的手机是否与无线路由器连接，如不为全0或全0xff 表示手机正在通过MAC为ap_mac的无线路由器上网。

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 34)]
        public string ssid;       // SSID,如果ap_mac为全0或全0xff时表示ssid为手机发出的历史SSID,否则表示当前正常在网无线路由器的SSID， 本字段如为全0x0表示没有采集到ssid,

        // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public Int16 rssi;          //采集到的信号强度，这个值为负数。

        // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public UInt32 channel;         // 如果ap_mac字段不为全0或全0xff 时有效，表示当前联接无线路由器的工作信道。
    };
}
